package de.unicornEntertainment.stundenplanapp.threadTools;

import java.util.HashMap;
import java.util.Iterator;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.blockzeiten.BlockzeitenActivity;
import de.unicornEntertainment.stundenplanapp.login.ActivityLogin;
import de.unicornEntertainment.stundenplanapp.util.JSONParser;
import de.unicornEntertainment.stundenplanapp.vertretung.VertretungenActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MyAsyncTask_Vertretungen extends AsyncTask {
	
	// Globale Deklaration
	private VertretungenActivity context;
	private JSONObject vertretungen;
	private String user = ActivityLogin.getUser();
	private String pass = ActivityLogin.getPass();
	private boolean vertretungenVorhanden = false;
	
	
	// JSON Nodes
	private static final String TAG_VERTRETUNG = "vertretung";
	private static final String TAG_KLASSE = "Klassenname";
	private static final String TAG_STUNDE = "Stunde";
	private static final String TAG_RAUM = "Raumnummer";
	private static final String TAG_LEHRERKUERZEL = "Kuerzel";
	
	// URL für JSON-Abruf
	private static String url = "http://gruppef.green-lagoon.de/login.php?head=vertretungen";
	
	// Konstruktor
	public MyAsyncTask_Vertretungen(VertretungenActivity context) {
		this.context = context;
	}

	
	/**
	 * Hintergrundverarbeitung in ausgelagertem Thread
	 */
	@Override
	protected Object doInBackground(Object... arg0) {
		
		try {
			// URL um Parameter erweitern
			
			url += ("&user=" + user + "&passwort=" + pass);
			
			System.out.println("URL-Vertretungen: " + url);
			
			// JSON Parser instanziieren
			JSONParser jParser = new JSONParser();
			
			// JSON als String von URL abgreifen
			JSONObject daten = jParser.getJSONFromUrl(url);
			
			System.out.println("JSON: " + daten.toString());
			
			// JSON-Array mit allen Blöcken abrufen
	        vertretungen = daten.getJSONObject(TAG_VERTRETUNG);
	         
	        
//	        System.out.println("Anzahl Vertretungen im JSON-Array: " + vertretungen.length());
	         
	        if (vertretungen.length() > 0) {
				vertretungenVorhanden = true;
			}
	         
	        // Über alle Blöcke iterieren
	        
	        @SuppressWarnings("rawtypes")
			Iterator keys = vertretungen.keys();
	        while ( keys.hasNext() ) {
	        	String key = (String)keys.next();
	            JSONObject vertretung = vertretungen.getJSONObject(key);
              
	            // Jedes JSON-Item in eine Variable stellen
	            String klasse = vertretung.getString(TAG_KLASSE);
	            String stunde = vertretung.getString(TAG_STUNDE);
	            String raum = vertretung.getString(TAG_RAUM);
	            String lehrer = vertretung.getString(TAG_LEHRERKUERZEL);
              
              
	            // Eine neue HashMap erzeugen
	            HashMap<String, String> map = new HashMap<String, String>();
             
	            // adding each child node to HashMap key => value
	            map.put(TAG_KLASSE, klasse);
	            map.put(TAG_STUNDE, stunde + ". Stunde");
	            map.put(TAG_RAUM, "Raum: " + raum);
	            map.put(TAG_LEHRERKUERZEL, "Vertretung durch: " + lehrer);
	             
//	             System.out.println("HashMap-Inhalt: " + map);

	             // HashMap zu ArrayList hinzufügen
	             context.getVertretungenliste().add(map);
			 }
		}
		catch(JSONException e) {
			e.printStackTrace();
			
			// Dialog im Fehlerfall entlassen
			context.getPrg().dismiss();
		}
		return null;
	}

	/**
	 * Wird nach der Hintergrundarbeit ausgeführt.
	 */
	@Override
	protected void onPostExecute(Object result) {
		
		if (vertretungenVorhanden) {
			/**
		     * Die Daten aus den JSON-Objekten an den Adapter übergeben.
		     */
		     context.setAdapter(new SimpleAdapter(context, context.getVertretungenliste(),
		             R.layout.vertretungen_listview_row,
		             new String[] {TAG_KLASSE, TAG_STUNDE, TAG_RAUM, TAG_LEHRERKUERZEL},
		             new int[] {R.id.vertretungen_listview_row_klasse, R.id.vertretungen_listview_row_stunde, R.id.vertretungen_listview_row_raum, R.id.vertretungen_listview_row_lehrer}));

		     // Adapter in der ListView registrieren 
		     context.getVertretungen().setAdapter(context.getAdapter());

		     // Dialog entlassen
		     context.getPrg().dismiss();
		}
		else {
			 // Dialog entlassen
		     context.getPrg().dismiss();
		     
		     Toast.makeText(context, "Keine Vertretungen vorhanden", Toast.LENGTH_SHORT).show();
		     
		     // Ansicht schließen
		     context.finish();
		}
	}
}
